home *** CD-ROM | disk | FTP | other *** search
/ Just Call Me Internet / Just Call Me Internet.iso / prog / atari / c / stik_dev / include / transprt.h < prev   
C/C++ Source or Header  |  1996-09-24  |  9KB  |  203 lines

  1. /*
  2.  *      transprt.h          (c) Steve Adam   1995
  3.  *                              steve@netinfo.com.au
  4.  *                   Support by Dan Ackerman 1996
  5.  *                              ackerman.29@postbox.acs.ohio-state.edu
  6.  *
  7.  *      Include this file to use functions from STiK.
  8.  *      i.e.: tcp, udp, etc ...
  9.  */
  10.  
  11. #ifndef STIK_TRANSPRT_H
  12. #define STIK_TRANSPRT_H
  13.  
  14. #ifndef   STIK_DRIVERS_H
  15. #include  "drivers.h"
  16. #endif /* STIK_DRIVERS_H */
  17.  
  18.  
  19. /*--------------------------------------------------------------------------*/
  20.  
  21. #define TRANSPORT_DRIVER    "TRANSPORT_TCPIP"
  22. #define TCP_DRIVER_VERSION  "01.11"
  23.  
  24. /*
  25.  * TCP connection states
  26.  */
  27. #define TCLOSED     0   /* No connection.  Null, void, absent, ...          */
  28. #define TLISTEN     1   /* Wait for remote request                          */
  29. #define TSYN_SENT   2   /* Connect request sent.  Await matching request    */
  30. #define TSYN_RECV   3   /* Wait for connection ACK.  (Listener only ??)     */
  31. #define TESTABLISH  4   /* Connection is established.  Handshake completed  */
  32. #define TFIN_WAIT1  5   /* Await termination request or acknowledgement     */
  33. #define TFIN_WAIT2  6   /* Await termination request                        */
  34. #define TCLOSE_WAIT 7   /* Await termination request from local user        */
  35. #define TCLOSING    8   /* Await termination acknowledge from remote TCP    */
  36. #define TLAST_ACK   9   /* Await acknowledgement of terminate request sent  */
  37. #define TTIME_WAIT 10   /* Delay to ensure remote has received term' ACK    */
  38.  
  39. /*
  40.  * Error return values
  41.  */
  42. #define E_NORMAL        0       /* No error occured ...                     */
  43. #define E_OBUFFULL     -1       /* Output buffer is full                    */
  44. #define E_NODATA       -2       /* No data available                        */
  45. #define E_EOF          -3       /* EOF from remote                          */
  46. #define E_RRESET       -4       /* RST received from remote                 */
  47. #define E_UA           -5       /* RST.  Other end sent unacceptable pkt    */
  48. #define E_NOMEM        -6       /* Something failed due to lack of memory   */
  49. #define E_REFUSE       -7       /* Connection refused by remote             */
  50. #define E_BADSYN       -8       /* A SYN was received in the window         */
  51. #define E_BADHANDLE    -9       /* Bad connection handle used.              */
  52. #define E_LISTEN       -10      /* The connection is in LISTEN state        */
  53. #define E_NOCCB        -11      /* No free CCB's available                  */
  54. #define E_NOCONNECTION -12      /* No connection matches this packet (TCP)  */
  55. #define E_CONNECTFAIL  -13      /* Failure to connect to remote port (TCP)  */
  56. #define E_BADCLOSE     -14      /* Invalid TCP_close() requested            */
  57. #define E_USERTIMEOUT  -15      /* A user function timed out                */
  58. #define E_CNTIMEOUT    -16      /* A the connection timed out               */
  59. #define E_CANTRESOLVE  -17      /* Can't resolve the hostname               */
  60. #define E_BADDNAME     -18      /* Domain name or dotted dec. bad format    */
  61. #define E_LOSTCARRIER  -19      /* The modem disconnected                   */
  62. #define E_NOHOSTNAME   -20      /* Hostname does not exist                  */
  63. #define E_DNSWORKLIMIT -21      /* Resolver Work limit reached              */
  64. #define E_NONAMESERVER -22      /* No nameservers could be found for query  */
  65. #define E_DNSBADFORMAT -23      /* Bad format of DS query                   */
  66. #define E_UNREACHABLE  -24      /* Destination unreachable                  */
  67. #define E_DNSNOADDR    -25      /* No address records exist for host        */
  68. #define E_LOCKED       -26    /* Routine is unavailable */
  69. #define E_LASTERROR     26    /* ABS of last error code in this list      */
  70.  
  71. /*
  72.  * FLagbox Flag definitions (max 64 flags ...)
  73.  */
  74. #define FL_do_resolve         0
  75. #define FL_housekeep          1
  76. #define FL_slipin 2
  77. #define FL_slipout 3
  78. #define FL_tcp_timer 4
  79. #define FL_frag_ttl_check 5
  80. #define FL_g_resv 6
  81. #define FL_g_wait 7
  82.  
  83.  
  84. /*--------------------------------------------------------------------------*/
  85.  
  86. /*
  87.  * Input queue structures
  88.  */
  89. typedef struct ndb {        /* Network Data Block.  For data delivery       */
  90.     char        *ptr;       /* Pointer to base of block. (For KRfree();)    */
  91.     char        *ndata;     /* Pointer to next data to deliver              */
  92.     uint16      len;        /* Length of remaining data                     */
  93.     struct ndb  *next;      /* Next NDB in chain or NULL                    */
  94. } NDB;
  95.  
  96.  
  97. /*
  98.  * Connection information block
  99.  */
  100. typedef struct cib {        /* Connection Information Block                 */
  101.     uint16      protocol;   /* TCP or UDP or ... 0 means CIB is not in use  */
  102.     uint16      lport;      /* TCP client port     (ie: local machine)      */
  103.     uint16      rport;      /* TCP server port     (ie: remote machine)     */
  104.     uint32      rhost;      /* TCP server IP addr  (ie: remote machine)     */
  105. } CIB;
  106.  
  107.  
  108. /*
  109.  * Values for protocol field
  110.  */
  111. #define P_ICMP     1
  112. #define P_TCP      6
  113. #define P_UDP     17
  114.  
  115.  
  116. /*--------------------------------------------------------------------------*/
  117.  
  118. /*
  119.  * Transport structure / functions
  120.  */
  121. typedef struct tpl {
  122.     char      *module;      /* Specific string that can be searched for     */
  123.     char      *author;      /* Any string                                   */
  124.     char      *version;     /* Format `00.00' Version:Revision              */
  125.     char   *  cdecl  (*KRmalloc) (int32);
  126.     void      cdecl  (*KRfree) (char *);
  127.     int32     cdecl  (*KRgetfree) (int16 x);
  128.     char   *  cdecl  (*KRrealloc) (char *, int32);
  129.     char   *  cdecl  (*get_err_text) (int16);
  130.     char   *  cdecl  (*getvstr) (char *);
  131.     int16     cdecl  (*carrier_detect) (void);
  132.     int16     cdecl  (*TCP_open) (uint32, int16, int16, uint16);
  133.     int16     cdecl  (*TCP_close) (int16, int16);
  134.     int16     cdecl  (*TCP_send) (int16, char *, int16);
  135.     int16     cdecl  (*TCP_wait_state) (int16, int16, int16);
  136.     int16     cdecl  (*TCP_ack_wait) (int16, int16);
  137.     int16     cdecl  (*UDP_open) (uint32, int16);
  138.     int16     cdecl  (*UDP_close) (int16);
  139.     int16     cdecl  (*UDP_send) (int16, char *, int16);
  140.     int16     cdecl  (*CNkick) (int16);
  141.     int16     cdecl  (*CNbyte_count) (int16);
  142.     int16     cdecl  (*CNget_char) (int16);
  143.     NDB    *  cdecl  (*CNget_NDB) (int16);
  144.     int16     cdecl  (*CNget_block) (int16, char *, int16);
  145.     void      cdecl  (*housekeep) (void);
  146.     int16     cdecl  (*resolve) (char *, char **, uint32 *, int16);
  147.     void      cdecl  (*ser_disable) (void);
  148.     void      cdecl  (*ser_enable) (void);
  149.     int16     cdecl  (*set_flag) (int16);
  150.     void      cdecl  (*clear_flag) (int16);
  151.     CIB    *  cdecl  (*CNgetinfo) (int16);
  152.     int16     cdecl  (*on_port) (char *port);
  153.     void      cdecl  (*off_port) (char *port);
  154.     int16     cdecl  (*setvstr) (char *vs, char *value);
  155.     int16     cdecl  (*query_port) (char *port);
  156.     int16     cdecl  (*g_resolve)(char *dn, char **rdn, uint32 *adr_list, int16 lsize); 
  157.     int16       cdecl  (*g_TCP_wait_state)(int16 cn, int16 state, int16 timeout);
  158. } TPL;
  159.  
  160. extern TPL *tpl;
  161.  
  162.  
  163. /*
  164.  * Definitions of transport functions for direct use
  165.  */
  166. #define KRmalloc(x)             (*tpl->KRmalloc)(x)
  167. #define KRfree(x)               (*tpl->KRfree)(x)
  168. #define KRgetfree(x)            (*tpl->KRgetfree)(x)
  169. #define KRrealloc(x,y)          (*tpl->KRrealloc)(x,y)
  170. #define get_err_text(x)         (*tpl->get_err_text)(x)
  171. #define getvstr(x)              (*tpl->getvstr)(x)
  172. #define carrier_detect()        (*tpl->carrier_detect)()
  173. #define TCP_open(h,p,t,o)       (*tpl->TCP_open)(h,p,t,o)
  174. #define TCP_close(x,y)          (*tpl->TCP_close)(x,y)
  175. #define TCP_send(x,y,z)         (*tpl->TCP_send)(x,y,z)
  176. #define TCP_wait_state(x,y,z)   (*tpl->TCP_wait_state)(x,y,z)
  177. #define TCP_ack_wait(x,y)       (*tpl->TCP_ack_wait)(x,y)
  178. #define UDP_open(x,y)           (*tpl->UDP_open)(x,y)
  179. #define UDP_close(x)            (*tpl->UDP_close)(x)
  180. #define UDP_send(x,y,z)         (*tpl->UDP_send)(x,y,z)
  181. #define CNkick(x)               (*tpl->CNkick)(x)
  182. #define CNbyte_count(x)         (*tpl->CNbyte_count)(x)
  183. #define CNget_char(x)           (*tpl->CNget_char)(x)
  184. #define CNget_NDB(x)            (*tpl->CNget_NDB)(x)
  185. #define CNget_block(x,y,z)      (*tpl->CNget_block)(x,y,z)
  186. #define housekeep()             (*tpl->housekeep)()
  187. #define resolve(w,x,y,z)        (*tpl->resolve)(w,x,y,z)
  188. #define ser_disable()           (*tpl->ser_disable)()
  189. #define ser_enable()            (*tpl->ser_enable)()
  190. #define set_flag(x)             (*tpl->set_flag)(x)
  191. #define clear_flag(x)           (*tpl->clear_flag)(x)
  192. #define CNgetinfo(x)            (*tpl->CNgetinfo)(x)
  193. #define on_port(x)              (*tpl->on_port)(x)
  194. #define off_port(x)             (*tpl->off_port)(x)
  195. #define setvstr(x,y)            (*tpl->setvstr)(x,y)
  196. #define query_port(x)           (*tpl->query_port)(x)
  197. #define g_resolve(x,x,y,z)      (*tpl->g_resolve)(w,x,y,z)
  198. #define g_TCP_wait_state(x,y,z) (*tpl->g_TCP_wait_state)(x,y,z)
  199.  
  200. /*--------------------------------------------------------------------------*/
  201.  
  202. #endif /* STIK_TRANSPRT_H */
  203.